<?php
/* 
 * ページスクローリング用抽象Class
 * 
 * スクローリングに使うselect文はケースによって違うので、これを継承し、
 * 必要に応じて実装してください。
 * 
 * author；		t.odaka
 * date;		2008/10/12
 * modified; 	2009/2/26  t.odaka
 *              2009/2/27  t.odaka
 * 				2009/5/20  t.odaka
 *					dbConnection.phpをMyDBConnection.class.php（オブジェクト）に変更。	 
*/
class AbstructPagingBean {

	/* プロパティー */
	var $_TableName, 
		$_PageSize, 
		$_TotalRecordsNum, 
		$_TotalPageNum;

	/* デフォルトのコンストラクタ */
	function __construct() {
	
		//dbコネクションの取得（$conn）
	
	}

	/* getter */
	function getTableName(){return $this->_TableName;}
	function getPageSize(){return $this->_PageSize;}
	function getTotalRecordsNum(){return $this->_TotalRecordsNum;}
	function getTotalPageNum(){return $this->_TotalPageNum;}

	/* setter */
	function setTableName($arg){$this->_TableName=$arg;}
	function setPageSize($arg){$this->_PageSize=$arg;}

	/* レコード総数を求める */
	function setTotalRecordsNum($conn){
		/* 以下は雛型です。ビジネスロジック側で実装してください */
//		$sql = "select count(*)  from ".$this->_TableName.";";
//		$result = $conn->query($sql);
//		if(PEAR::isError($result)){
//			$result->$conn->getMessage();
//		}
//		$row = $result->fetchRow(MDB2_FETCHMODE_ORDERED);
//		$this->_TotalRecordsNum=$row[0];
	}
	
	/* ページ総数を求める */
	function setTotalPageNum(){
		$records = $this->_TotalRecordsNum;
		$sho = floor($records/($this->_PageSize));
		$amari = $records%($this->_PageSize);
		if($amari==0){
			$this->_TotalPageNum=$sho;
		} else{
			$this->_TotalPageNum=$sho+1;
		}
	}
	
	function calc($conn){
		$this->setTotalRecordsNum($conn);
		$this->setTotalPageNum();
	}
	
	/* 指定されたページへ遷移する */
	function goPage($conn, $goto){
		/* ビジネスロジック側で実装してください */
	}

	/* 最初のページへ遷移する */
	function goTop($conn){
		return goPage($conn,1);
	}

	/* 最後のページへ遷移する */
	function goBottom($conn){
		return goPage($conn,$this->_TotalPageNum);
	}
	
	/* ページ番号を入れた配列（表示用）を作成する */
//	function getPageArray(){
//		$array = array();
//		for($i=0; $i < $this->_TotalPageNum; $i++){
//			$array[$i]=$i + 1;
//		}
//	return $array;
//	}

	/* ページ番号を入れた配列（表示用）を作成する
	 * リクエストされたページを中心として５ページを出す。 
	*/
	function getPageArray($myReqPage){
		require('../Myznala/debugLog.php');
		
//		$myDebugLog->debug('getPageArray start');
		
		$array = array();
		if($this->_TotalPageNum < 5){
			for($i=0; $i < $this->_TotalPageNum; $i++){
				$array[$i] = $i + 1;
			}
//			$myDebugLog->debug('1');
		}else if($myReqPage < 3){
			$j=0;
			$wSt= max(1,$myReqPage-1);
			$wEd= $wSt+5;
			for($i=$wSt; $i < $wEd; $i++){
				$array[$j] = $i+1;
				$j++;
			}
//			$myDebugLog->debug('2');
		}else if($myReqPage > $this->_TotalPageNum - 2){
			$j=0;
			for($i= $this->_TotalPageNum - 4; $i < $this->_TotalPageNum +1; $i++){
				$array[$j] = $i;
				$j++;
			}
//			$myDebugLog->debug('3');
		}else{
			// 3, -- , total-2
			$j=0;
			for($i = max(0,$myReqPage-2); $i < min($myReqPage+3,$this->_TotalPageNum+1); $i++){
				$array[$j]=$i;
				$j++;
			}
//			$myDebugLog->debug('4');
		}
				
//		$myDebugLog->debug('myPageArray length'.count($array));
		
//		$myDebugLog->debug('getPageArray end');
		
		return $array;
	}
}
?>